mruby 4.0.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
internal.h
Go to the documentation of this file.
1
6
7#ifndef MRUBY_INTERNAL_H
8#define MRUBY_INTERNAL_H
9
10#ifdef MRUBY_ARRAY_H
11void mrb_ary_decref(mrb_state*, mrb_shared_array*);
12mrb_value mrb_ary_subseq(mrb_state *mrb, mrb_value ary, mrb_int beg, mrb_int len);
13#endif
14
15#ifdef MRUBY_CLASS_H
16struct RClass *mrb_vm_define_class(mrb_state*, mrb_value, mrb_value, mrb_sym);
17struct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym);
18mrb_value mrb_instance_new(mrb_state *mrb, mrb_value cv);
19void mrb_class_name_class(mrb_state*, struct RClass*, struct RClass*, mrb_sym);
20mrb_bool mrb_const_name_p(mrb_state*, const char*, mrb_int);
21mrb_value mrb_class_find_path(mrb_state*, struct RClass*);
22mrb_value mrb_mod_to_s(mrb_state *, mrb_value);
23void mrb_method_added(mrb_state *mrb, struct RClass *c, mrb_sym mid);
24mrb_noreturn void mrb_method_missing(mrb_state *mrb, mrb_sym name, mrb_value self, mrb_value args);
25mrb_method_t mrb_vm_find_method(mrb_state *mrb, struct RClass *c, struct RClass **cp, mrb_sym mid);
26mrb_value mrb_mod_const_missing(mrb_state *mrb, mrb_value mod);
27mrb_value mrb_const_missing(mrb_state *mrb, mrb_value mod, mrb_sym sym);
28size_t mrb_class_mt_memsize(mrb_state*, struct RClass*);
29mrb_value mrb_obj_extend(mrb_state*, mrb_value obj);
30#endif
31
32mrb_value mrb_obj_equal_m(mrb_state *mrb, mrb_value);
33
34/* debug */
35size_t mrb_packed_int_len(uint32_t num);
36size_t mrb_packed_int_encode(uint32_t num, uint8_t *p);
37uint32_t mrb_packed_int_decode(const uint8_t *p, const uint8_t **newpos);
38
39/* dump */
40#ifdef MRUBY_IREP_H
41int mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size);
42#ifndef MRB_NO_STDIO
43int mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep*, uint8_t flags, FILE *f, const char *initname);
44int mrb_dump_irep_cstruct(mrb_state *mrb, const mrb_irep*, uint8_t flags, FILE *f, const char *initname);
45#endif
46#endif
47
48/* codedump */
49void mrb_codedump_all(mrb_state *mrb, struct RProc *proc);
50#ifndef MRB_NO_STDIO
51void mrb_codedump_all_file(mrb_state *mrb, struct RProc *proc, FILE *out);
52#endif
53
54/* error */
55mrb_value mrb_exc_inspect(mrb_state *mrb, mrb_value exc);
56mrb_value mrb_exc_backtrace(mrb_state *mrb, mrb_value exc);
57mrb_value mrb_get_backtrace(mrb_state *mrb);
58void mrb_exc_mesg_set(mrb_state *mrb, struct RException *exc, mrb_value mesg);
59mrb_value mrb_exc_mesg_get(mrb_state *mrb, struct RException *exc);
60mrb_value mrb_f_raise(mrb_state*, mrb_value);
61mrb_value mrb_make_exception(mrb_state *mrb, mrb_value exc, mrb_value mesg);
62mrb_value mrb_exc_get_output(mrb_state *mrb, struct RObject *exc);
63
64struct RBacktrace {
65 MRB_OBJECT_HEADER;
66 size_t len;
67 struct mrb_backtrace_location *locations;
68};
69
71 mrb_sym method_id;
72 int32_t idx;
73 const mrb_irep *irep;
74};
75
76/* gc */
77size_t mrb_gc_mark_mt(mrb_state*, struct RClass*);
78void mrb_gc_free_mt(mrb_state*, struct RClass*);
79
80/* hash */
81size_t mrb_hash_memsize(mrb_value obj);
82size_t mrb_gc_mark_hash(mrb_state*, struct RHash*);
83void mrb_gc_free_hash(mrb_state*, struct RHash*);
84mrb_value mrb_hash_first_key(mrb_state*, mrb_value);
85uint32_t mrb_obj_hash_code(mrb_state *mrb, mrb_value key);
86
87/* irep */
88struct mrb_insn_data mrb_decode_insn(const mrb_code *pc);
89#ifdef MRUBY_IREP_H
90void mrb_irep_free(mrb_state*, struct mrb_irep*);
91
92static inline const struct mrb_irep_catch_handler *
93mrb_irep_catch_handler_table(const struct mrb_irep *irep)
94{
95 if (irep->clen > 0) {
96 return (const struct mrb_irep_catch_handler*)(irep->iseq + irep->ilen);
97 }
98 else {
99 return (const struct mrb_irep_catch_handler*)NULL;
100 }
101}
102#endif
103
104/* numeric */
105mrb_value mrb_div_int_value(mrb_state *mrb, mrb_int x, mrb_int y);
106mrb_int mrb_div_int(mrb_int x, mrb_int y);
111mrb_noreturn void mrb_int_overflow(mrb_state *mrb, const char *reason);
112#ifndef MRB_NO_FLOAT
113void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
114#endif
115
116#ifdef MRB_USE_COMPLEX
117mrb_value mrb_complex_new(mrb_state *mrb, mrb_float x, mrb_float y);
118mrb_value mrb_complex_add(mrb_state *mrb, mrb_value x, mrb_value y);
119mrb_value mrb_complex_sub(mrb_state *mrb, mrb_value x, mrb_value y);
120mrb_value mrb_complex_mul(mrb_state *mrb, mrb_value x, mrb_value y);
121mrb_value mrb_complex_div(mrb_state *mrb, mrb_value x, mrb_value y);
122void mrb_complex_copy(mrb_state *mrb, mrb_value x, mrb_value y);
123#endif
124#ifdef MRB_USE_RATIONAL
125mrb_value mrb_rational_new(mrb_state *mrb, mrb_int x, mrb_int y);
126mrb_value mrb_rational_add(mrb_state *mrb, mrb_value x, mrb_value y);
127mrb_value mrb_rational_sub(mrb_state *mrb, mrb_value x, mrb_value y);
128mrb_value mrb_rational_mul(mrb_state *mrb, mrb_value x, mrb_value y);
129mrb_value mrb_rational_div(mrb_state *mrb, mrb_value x, mrb_value y);
130mrb_value mrb_as_rational(mrb_state *mrb, mrb_value x);
131void mrb_rational_copy(mrb_state *mrb, mrb_value x, mrb_value y);
132int mrb_rational_mark(mrb_state *mrb, struct RBasic *rat);
133#endif
134#ifdef MRB_USE_SET
135size_t mrb_gc_mark_set(mrb_state *mrb, struct RBasic *set);
136void mrb_gc_free_set(mrb_state *mrb, struct RBasic *set);
137size_t mrb_set_memsize(mrb_value);
138#endif
139
140#ifdef MRUBY_PROC_H
141struct RProc *mrb_closure_new(mrb_state*, const mrb_irep*);
142void mrb_proc_copy(mrb_state *mrb, struct RProc *a, const struct RProc *b);
143mrb_int mrb_proc_arity(const struct RProc *p);
144struct REnv *mrb_env_new(mrb_state *mrb, struct mrb_context *c, mrb_callinfo *ci, int nstacks, mrb_value *stack, struct RClass *tc);
145void mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack);
146mrb_value mrb_proc_local_variables(mrb_state *mrb, const struct RProc *proc);
147const struct RProc *mrb_proc_get_caller(mrb_state *mrb, struct REnv **env);
148mrb_value mrb_proc_get_self(mrb_state *mrb, const struct RProc *p, struct RClass **target_class_p);
149mrb_bool mrb_proc_eql(mrb_state *mrb, mrb_value self, mrb_value other);
150#endif
151
152/* range */
153#ifdef MRUBY_RANGE_H
154mrb_value mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, const mrb_value *argv, mrb_value (*func)(mrb_state*, mrb_value, mrb_int));
155size_t mrb_gc_mark_range(mrb_state *mrb, struct RRange *r);
156#endif
157
158/* string */
159void mrb_gc_free_str(mrb_state*, struct RString*);
160uint32_t mrb_str_hash(mrb_state *mrb, mrb_value str);
161mrb_value mrb_str_dump(mrb_state *mrb, mrb_value str);
162mrb_value mrb_str_inspect(mrb_state *mrb, mrb_value str);
163mrb_bool mrb_str_beg_len(mrb_int str_len, mrb_int *begp, mrb_int *lenp);
164mrb_value mrb_str_byte_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len);
165mrb_value mrb_str_aref(mrb_state *mrb, mrb_value str, mrb_value idx, mrb_value len);
166mrb_bool mrb_strcasecmp_p(const char *s1, mrb_int len1, const char *s2, mrb_int len2);
167#define MRB_STR_CASECMP_P(str, lit) \
168 mrb_strcasecmp_p(RSTRING_PTR(str), RSTRING_LEN(str), lit, sizeof(lit"")-1)
169uint32_t mrb_byte_hash(const uint8_t*, mrb_int);
170uint32_t mrb_byte_hash_step(const uint8_t*, mrb_int, uint32_t);
171
172mrb_int mrb_utf8_to_buf(char *buf, uint32_t cp);
173#ifdef MRB_UTF8_STRING
174mrb_int mrb_utf8len(const char *str, const char *end);
175mrb_int mrb_utf8_strlen(const char *str, mrb_int byte_len);
176#endif
177
178/* variable */
179mrb_value mrb_vm_special_get(mrb_state*, mrb_sym);
180void mrb_vm_special_set(mrb_state*, mrb_sym, mrb_value);
181mrb_value mrb_vm_cv_get(mrb_state*, mrb_sym);
182void mrb_vm_cv_set(mrb_state*, mrb_sym, mrb_value);
183mrb_value mrb_vm_const_get(mrb_state*, mrb_sym);
184size_t mrb_obj_iv_tbl_memsize(mrb_value);
185void mrb_obj_iv_set_force(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
186mrb_value mrb_mod_constants(mrb_state *mrb, mrb_value mod);
187mrb_value mrb_mod_const_at(mrb_state *mrb, struct RClass *c, mrb_value ary);
188mrb_value mrb_f_global_variables(mrb_state *mrb, mrb_value self);
189mrb_value mrb_obj_instance_variables(mrb_state*, mrb_value);
190mrb_value mrb_mod_class_variables(mrb_state*, mrb_value);
191mrb_value mrb_mod_cv_get(mrb_state *mrb, struct RClass *c, mrb_sym sym);
192mrb_bool mrb_mod_cv_defined(mrb_state *mrb, struct RClass *c, mrb_sym sym);
193mrb_bool mrb_ident_p(const char *s, mrb_int len);
194mrb_value mrb_exc_const_get(mrb_state *mrb, mrb_sym sym);
195
196/* GC functions */
197void mrb_gc_mark_gv(mrb_state*);
198void mrb_gc_free_gv(mrb_state*);
199size_t mrb_gc_mark_iv(mrb_state*, struct RObject*);
200void mrb_gc_free_iv(mrb_state*, struct RObject*);
201
202/* IV shape tree */
203void mrb_init_shape(mrb_state*);
204void mrb_free_shape(mrb_state*);
205
206/* VM */
207#define MRB_CI_VISIBILITY(ci) MRB_FLAGS_GET((ci)->vis, 0, 2)
208#define MRB_CI_SET_VISIBILITY(ci, visi) MRB_FLAGS_SET((ci)->vis, 0, 2, visi)
209#define MRB_CI_VISIBILITY_BREAK_P(ci) MRB_FLAG_CHECK((ci)->vis, 2)
210#define MRB_CI_SET_VISIBILITY_BREAK(ci) MRB_FLAG_ON((ci)->vis, 2)
211mrb_int mrb_ci_bidx(mrb_callinfo *ci);
212mrb_int mrb_ci_nregs(mrb_callinfo *ci);
213mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, const struct RProc *p);
214mrb_value mrb_obj_instance_eval(mrb_state*, mrb_value);
215mrb_value mrb_object_exec(mrb_state *mrb, mrb_value self, struct RClass *target_class);
216mrb_value mrb_mod_module_eval(mrb_state*, mrb_value);
217mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
218mrb_value mrb_f_public_send(mrb_state *mrb, mrb_value self);
219
220#ifdef MRB_USE_BIGINT
221mrb_value mrb_bint_new_int(mrb_state *mrb, mrb_int x);
222#ifdef MRB_INT64
223#define mrb_bint_new_int64(mrb,x) mrb_bint_new_int((mrb),(mrb_int)(x))
224#else
225mrb_value mrb_bint_new_int64(mrb_state *mrb, int64_t x);
226#endif
227mrb_value mrb_bint_new_uint64(mrb_state *mrb, uint64_t x);
228mrb_value mrb_bint_new_str(mrb_state *mrb, const char *x, mrb_int len, mrb_int base);
229mrb_value mrb_as_bint(mrb_state *mrb, mrb_value x);
230mrb_value mrb_bint_add(mrb_state *mrb, mrb_value x, mrb_value y);
231mrb_value mrb_bint_sub(mrb_state *mrb, mrb_value x, mrb_value y);
232mrb_value mrb_bint_add_n(mrb_state *mrb, mrb_value x, mrb_value y);
233mrb_value mrb_bint_sub_n(mrb_state *mrb, mrb_value x, mrb_value y);
234mrb_value mrb_bint_mul(mrb_state *mrb, mrb_value x, mrb_value y);
235mrb_value mrb_bint_div(mrb_state *mrb, mrb_value x, mrb_value y);
236mrb_value mrb_bint_divmod(mrb_state *mrb, mrb_value x, mrb_value y);
237mrb_value mrb_bint_add_ii(mrb_state *mrb, mrb_int x, mrb_int y);
238mrb_value mrb_bint_sub_ii(mrb_state *mrb, mrb_int x, mrb_int y);
239mrb_value mrb_bint_mul_ii(mrb_state *mrb, mrb_int x, mrb_int y);
240mrb_value mrb_bint_mod(mrb_state *mrb, mrb_value x, mrb_value y);
241mrb_value mrb_bint_rem(mrb_state *mrb, mrb_value x, mrb_value y);
242mrb_value mrb_bint_pow(mrb_state *mrb, mrb_value x, mrb_value y);
243mrb_value mrb_bint_powm(mrb_state *mrb, mrb_value x, mrb_value y, mrb_value z);
244mrb_value mrb_bint_and(mrb_state *mrb, mrb_value x, mrb_value y);
245mrb_value mrb_bint_or(mrb_state *mrb, mrb_value x, mrb_value y);
246mrb_value mrb_bint_neg(mrb_state *mrb, mrb_value x);
247mrb_value mrb_bint_xor(mrb_state *mrb, mrb_value x, mrb_value y);
248mrb_value mrb_bint_rev(mrb_state *mrb, mrb_value x);
249mrb_value mrb_bint_lshift(mrb_state *mrb, mrb_value x, mrb_int width);
250mrb_value mrb_bint_rshift(mrb_state *mrb, mrb_value x, mrb_int width);
251mrb_value mrb_bint_to_s(mrb_state *mrb, mrb_value x, mrb_int base);
252#ifndef MRB_NO_FLOAT
253mrb_value mrb_bint_new_float(mrb_state *mrb, mrb_float x);
254mrb_float mrb_bint_as_float(mrb_state *mrb, mrb_value x);
255#endif
256mrb_int mrb_bint_as_int(mrb_state *mrb, mrb_value x);
257#ifdef MRB_INT64
258#define mrb_bint_as_int64(mrb, x) mrb_bint_as_int((mrb), (x))
259#else
260int64_t mrb_bint_as_int64(mrb_state *mrb, mrb_value x);
261#endif
262uint64_t mrb_bint_as_uint64(mrb_state *mrb, mrb_value x);
263mrb_int mrb_bint_cmp(mrb_state *mrb, mrb_value x, mrb_value y);
264void mrb_gc_free_bint(mrb_state *mrb, struct RBasic *x);
265void mrb_bint_copy(mrb_state *mrb, mrb_value x, mrb_value y);
266size_t mrb_bint_memsize(mrb_value x);
267mrb_value mrb_bint_hash(mrb_state *mrb, mrb_value x);
268mrb_value mrb_bint_sqrt(mrb_state *mrb, mrb_value x);
269mrb_int mrb_bint_size(mrb_state *mrb, mrb_value bint);
270mrb_value mrb_bint_from_bytes(mrb_state *mrb, const uint8_t *bytes, mrb_int len);
271mrb_int mrb_bint_sign(mrb_state *mrb, mrb_value bint);
272mrb_value mrb_bint_gcd(mrb_state *mrb, mrb_value x, mrb_value y);
273mrb_value mrb_bint_lcm(mrb_state *mrb, mrb_value x, mrb_value y);
274mrb_value mrb_bint_abs(mrb_state *mrb, mrb_value x);
275#endif
276
277#ifdef MRB_USE_TASK_SCHEDULER
278/* GC marking for task scheduler */
279void mrb_task_mark_all(mrb_state *mrb);
280#endif
281
282/* Internal object allocation without type validation (gc.c) */
283struct RBasic* mrb_obj_alloc_core(mrb_state*, enum mrb_vtype, struct RClass*);
284
285#endif /* MRUBY_INTERNAL_H */
mruby Symbol.
#define mrb_noreturn
Shared compiler macros.
Definition common.h:50
mrb_noreturn void mrb_int_zerodiv(mrb_state *mrb)
This function is called to raise a ZeroDivisionError.
Definition numeric.c:45
mrb_int mrb_div_int(mrb_int x, mrb_int y)
Performs integer division of x by y.
Definition numeric.c:157
mrb_value mrb_int_mul(mrb_state *mrb, mrb_value x, mrb_value y)
Multiplies two mrb_values, x and y, where x is expected to be an integer.
Definition numeric.c:1082
mrb_value mrb_int_add(mrb_state *mrb, mrb_value x, mrb_value y)
Adds two mrb_values, x and y, where x is expected to be an integer.
Definition numeric.c:1812
mrb_noreturn void mrb_int_overflow(mrb_state *mrb, const char *reason)
This function is called to raise a RangeError when an integer operation results in an overflow.
Definition numeric.c:33
void mrb_check_num_exact(mrb_state *mrb, mrb_float num)
Checks if a mrb_float value is Infinity or NaN.
Definition numeric.c:761
mrb_value mrb_int_sub(mrb_state *mrb, mrb_value x, mrb_value y)
Subtracts mrb_value y from mrb_value x, where x is expected to be an integer.
Definition numeric.c:1893
mrb_value mrb_div_int_value(mrb_state *mrb, mrb_int x, mrb_int y)
Performs integer division of x by y and returns the result as an mrb_value.
Definition numeric.c:179
uint8_t mrb_code
mruby C API entry point
Definition mruby.h:148
Definition internal.h:64
Definition object.h:19
Class class.
Definition class.h:17
Proc class.
Definition proc.h:26
mruby error handling.
Definition error.h:18
Hash class.
Definition hash.h:18
Definition object.h:34
Definition proc.h:53
Definition range.h:36
Definition string.h:22
Definition internal.h:70
Definition mruby.h:165
Definition mruby.h:196
Definition irep.h:126
Definition irep.h:47
Definition irep.h:55
Definition mruby.h:229
Definition array.h:17
Definition mruby.h:280
Definition boxing_nan.h:40